
<!doctype html>
<html lang="zh" class="no-js">
  <head>
    
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1">
      
        <meta name="description" content="脚本文档">
      
      
        <meta name="author" content="Logan">
      
      
        <link rel="canonical" href="http://localhost:8000/installation/kubernetes/operations/">
      
      
        <link rel="prev" href="../resources/">
      
      
        <link rel="next" href="../best-practices/">
      
      
      <link rel="icon" href="../../../image/favicon.ico">
      <meta name="generator" content="mkdocs-1.6.1, mkdocs-material-9.5.50">
    
    
      
        <title>运维操作 - 运维无忧文档</title>
      
    
    
      <link rel="stylesheet" href="../../../assets/stylesheets/main.a40c8224.min.css">
      
        
        <link rel="stylesheet" href="../../../assets/stylesheets/palette.06af60db.min.css">
      
      


    
    
      
    
    
      
        
        
        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
        <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
      
    
    
      <link rel="stylesheet" href="../../../css/extra.css">
    
      <link rel="stylesheet" href="../../../css/prism.css">
    
    <script>__md_scope=new URL("../../..",location),__md_hash=e=>[...e].reduce(((e,_)=>(e<<5)-e+_.charCodeAt(0)),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
    
      

    
    
    
  </head>
  
  
    
    
      
    
    
    
    
    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue">
  
    
    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
    <label class="md-overlay" for="__drawer"></label>
    <div data-md-component="skip">
      
        
        <a href="#kubernetes" class="md-skip">
          跳转至
        </a>
      
    </div>
    <div data-md-component="announce">
      
    </div>
    
    
      

  

<header class="md-header md-header--shadow" data-md-component="header">
  <nav class="md-header__inner md-grid" aria-label="页眉">
    <a href="../../.." title="运维无忧文档" class="md-header__button md-logo" aria-label="运维无忧文档" data-md-component="logo">
      
  <img src="../../../image/logo.png" alt="logo">

    </a>
    <label class="md-header__button md-icon" for="__drawer">
      
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3zm0 5h18v2H3zm0 5h18v2H3z"/></svg>
    </label>
    <div class="md-header__title" data-md-component="header-title">
      <div class="md-header__ellipsis">
        <div class="md-header__topic">
          <span class="md-ellipsis">
            运维无忧文档
          </span>
        </div>
        <div class="md-header__topic" data-md-component="header-topic">
          <span class="md-ellipsis">
            
              运维操作
            
          </span>
        </div>
      </div>
    </div>
    
      
        <form class="md-header__option" data-md-component="palette">
  
    
    
    
    <input class="md-option" data-md-color-media="" data-md-color-scheme="default" data-md-color-primary="indigo" data-md-color-accent="blue"  aria-label="Switch to dark mode"  type="radio" name="__palette" id="__palette_0">
    
      <label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 7a5 5 0 0 1 5 5 5 5 0 0 1-5 5 5 5 0 0 1-5-5 5 5 0 0 1 5-5m0 2a3 3 0 0 0-3 3 3 3 0 0 0 3 3 3 3 0 0 0 3-3 3 3 0 0 0-3-3m0-7 2.39 3.42C13.65 5.15 12.84 5 12 5s-1.65.15-2.39.42zM3.34 7l4.16-.35A7.2 7.2 0 0 0 5.94 8.5c-.44.74-.69 1.5-.83 2.29zm.02 10 1.76-3.77a7.131 7.131 0 0 0 2.38 4.14zM20.65 7l-1.77 3.79a7.02 7.02 0 0 0-2.38-4.15zm-.01 10-4.14.36c.59-.51 1.12-1.14 1.54-1.86.42-.73.69-1.5.83-2.29zM12 22l-2.41-3.44c.74.27 1.55.44 2.41.44.82 0 1.63-.17 2.37-.44z"/></svg>
      </label>
    
  
    
    
    
    <input class="md-option" data-md-color-media="" data-md-color-scheme="slate" data-md-color-primary="indigo" data-md-color-accent="blue"  aria-label="Switch to light mode"  type="radio" name="__palette" id="__palette_1">
    
      <label class="md-header__button md-icon" title="Switch to light mode" for="__palette_0" hidden>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3zm3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95zm-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31"/></svg>
      </label>
    
  
</form>
      
    
    
      <script>var palette=__md_get("__palette");if(palette&&palette.color){if("(prefers-color-scheme)"===palette.color.media){var media=matchMedia("(prefers-color-scheme: light)"),input=document.querySelector(media.matches?"[data-md-color-media='(prefers-color-scheme: light)']":"[data-md-color-media='(prefers-color-scheme: dark)']");palette.color.media=input.getAttribute("data-md-color-media"),palette.color.scheme=input.getAttribute("data-md-color-scheme"),palette.color.primary=input.getAttribute("data-md-color-primary"),palette.color.accent=input.getAttribute("data-md-color-accent")}for(var[key,value]of Object.entries(palette.color))document.body.setAttribute("data-md-color-"+key,value)}</script>
    
    
    
      <label class="md-header__button md-icon" for="__search">
        
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
      </label>
      <div class="md-search" data-md-component="search" role="dialog">
  <label class="md-search__overlay" for="__search"></label>
  <div class="md-search__inner" role="search">
    <form class="md-search__form" name="search">
      <input type="text" class="md-search__input" name="query" aria-label="搜索" placeholder="搜索" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
      <label class="md-search__icon md-icon" for="__search">
        
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.52 6.52 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5"/></svg>
        
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11z"/></svg>
      </label>
      <nav class="md-search__options" aria-label="查找">
        
        <button type="reset" class="md-search__icon md-icon" title="清空当前内容" aria-label="清空当前内容" tabindex="-1">
          
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/></svg>
        </button>
      </nav>
      
    </form>
    <div class="md-search__output">
      <div class="md-search__scrollwrap" tabindex="0" data-md-scrollfix>
        <div class="md-search-result" data-md-component="search-result">
          <div class="md-search-result__meta">
            正在初始化搜索引擎
          </div>
          <ol class="md-search-result__list" role="presentation"></ol>
        </div>
      </div>
    </div>
  </div>
</div>
    
    
      <div class="md-header__source">
        <a href="https://git.opsx.vip/docs/wuyou.run.git" title="前往仓库" class="md-source" data-md-component="source">
  <div class="md-source__icon md-icon">
    
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
  </div>
  <div class="md-source__repository">
    wuyou.run
  </div>
</a>
      </div>
    
  </nav>
  
</header>
    
    <div class="md-container" data-md-component="container">
      
      
        
          
        
      
      <main class="md-main" data-md-component="main">
        <div class="md-main__inner md-grid">
          
            
              
              <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    



<nav class="md-nav md-nav--primary" aria-label="导航栏" data-md-level="0">
  <label class="md-nav__title" for="__drawer">
    <a href="../../.." title="运维无忧文档" class="md-nav__button md-logo" aria-label="运维无忧文档" data-md-component="logo">
      
  <img src="../../../image/logo.png" alt="logo">

    </a>
    运维无忧文档
  </label>
  
    <div class="md-nav__source">
      <a href="https://git.opsx.vip/docs/wuyou.run.git" title="前往仓库" class="md-source" data-md-component="source">
  <div class="md-source__icon md-icon">
    
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81"/></svg>
  </div>
  <div class="md-source__repository">
    wuyou.run
  </div>
</a>
    </div>
  
  <ul class="md-nav__list" data-md-scrollfix>
    
      
      
  
  
  
  
    <li class="md-nav__item">
      <a href="../../.." class="md-nav__link">
        
  
  <span class="md-ellipsis">
    首页
  </span>
  

      </a>
    </li>
  

    
      
      
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2" >
        
          
          <label class="md-nav__link" for="__nav_2" id="__nav_2_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    Linux基础设施
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_2_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_2">
            <span class="md-nav__icon md-icon"></span>
            Linux基础设施
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_1" >
        
          
          <label class="md-nav__link" for="__nav_2_1" id="__nav_2_1_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    基础环境配置
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_1_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_2_1">
            <span class="md-nav__icon md-icon"></span>
            基础环境配置
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../system_init/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    系统初始化
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../dev_env/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    开发环境搭建
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

              
            
              
                
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_2" >
        
          
          <label class="md-nav__link" for="__nav_2_2" id="__nav_2_2_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    常用服务部署
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_2_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_2_2">
            <span class="md-nav__icon md-icon"></span>
            常用服务部署
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_2_1" >
        
          
          <label class="md-nav__link" for="__nav_2_2_1" id="__nav_2_2_1_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    Web服务与代理
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_2_1_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_2_2_1">
            <span class="md-nav__icon md-icon"></span>
            Web服务与代理
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../web_services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    Web服务
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../proxy_services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    代理服务
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../services-loadbalancing/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    负载均衡服务
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../cache_services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    缓存加速服务
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

              
            
              
                
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_2_2" >
        
          
          <label class="md-nav__link" for="__nav_2_2_2" id="__nav_2_2_2_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    数据存储
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_2_2_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_2_2_2">
            <span class="md-nav__icon md-icon"></span>
            数据存储
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../database_services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    数据库服务
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../storage_services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    文件存储服务
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

              
            
              
                
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_2_3" >
        
          
          <label class="md-nav__link" for="__nav_2_2_3" id="__nav_2_2_3_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    监控与日志
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="3" aria-labelledby="__nav_2_2_3_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_2_2_3">
            <span class="md-nav__icon md-icon"></span>
            监控与日志
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../monitoring_services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    监控系统
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../logging_services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    日志管理
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../message_queue_services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    消息队列
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

              
            
              
                
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_2_3" >
        
          
          <label class="md-nav__link" for="__nav_2_3" id="__nav_2_3_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    系统运维
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_2_3_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_2_3">
            <span class="md-nav__icon md-icon"></span>
            系统运维
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../storage/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    存储与备份
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../lvm/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    LVM存储管理
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../network/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    网络服务配置
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../monitor/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    监控与日志
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

    
      
      
  
  
    
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--active md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3" checked>
        
          
          <label class="md-nav__link" for="__nav_3" id="__nav_3_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    容器与编排
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_3_label" aria-expanded="true">
          <label class="md-nav__title" for="__nav_3">
            <span class="md-nav__icon md-icon"></span>
            容器与编排
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_1" >
        
          
          <label class="md-nav__link" for="__nav_3_1" id="__nav_3_1_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    Docker
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_1_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_3_1">
            <span class="md-nav__icon md-icon"></span>
            Docker
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../docker/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    基础安装
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../docker/build/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    镜像构建
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../docker/services/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    常用服务部署
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../docker/network-storage/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    网络与存储
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../docker-compose/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    Docker Compose
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
    
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--active md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_3_3" checked>
        
          
          <label class="md-nav__link" for="__nav_3_3" id="__nav_3_3_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    Kubernetes
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="2" aria-labelledby="__nav_3_3_label" aria-expanded="true">
          <label class="md-nav__title" for="__nav_3_3">
            <span class="md-nav__icon md-icon"></span>
            Kubernetes
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    集群部署
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../resources/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    资源管理
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
    
  
  
  
    <li class="md-nav__item md-nav__item--active">
      
      <input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
      
      
        
      
      
        <label class="md-nav__link md-nav__link--active" for="__toc">
          
  
  <span class="md-ellipsis">
    运维操作
  </span>
  

          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <a href="./" class="md-nav__link md-nav__link--active">
        
  
  <span class="md-ellipsis">
    运维操作
  </span>
  

      </a>
      
        

<nav class="md-nav md-nav--secondary" aria-label="目录">
  
  
  
    
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      目录
    </label>
    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#_1" class="md-nav__link">
    <span class="md-ellipsis">
      日常管理操作
    </span>
  </a>
  
    <nav class="md-nav" aria-label="日常管理操作">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#_2" class="md-nav__link">
    <span class="md-ellipsis">
      集群健康检查
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_3" class="md-nav__link">
    <span class="md-ellipsis">
      节点维护
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_4" class="md-nav__link">
    <span class="md-ellipsis">
      资源清理
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_5" class="md-nav__link">
    <span class="md-ellipsis">
      备份与恢复
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_6" class="md-nav__link">
    <span class="md-ellipsis">
      监控与日志
    </span>
  </a>
  
    <nav class="md-nav" aria-label="监控与日志">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#prometheus" class="md-nav__link">
    <span class="md-ellipsis">
      Prometheus监控
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_7" class="md-nav__link">
    <span class="md-ellipsis">
      日志收集与分析
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_8" class="md-nav__link">
    <span class="md-ellipsis">
      安全与合规
    </span>
  </a>
  
    <nav class="md-nav" aria-label="安全与合规">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#rbac" class="md-nav__link">
    <span class="md-ellipsis">
      RBAC权限管理
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_9" class="md-nav__link">
    <span class="md-ellipsis">
      安全策略
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_10" class="md-nav__link">
    <span class="md-ellipsis">
      故障排查
    </span>
  </a>
  
    <nav class="md-nav" aria-label="故障排查">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#_11" class="md-nav__link">
    <span class="md-ellipsis">
      常见问题排查流程
    </span>
  </a>
  
    <nav class="md-nav" aria-label="常见问题排查流程">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#pod" class="md-nav__link">
    <span class="md-ellipsis">
      Pod启动失败排查
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_12" class="md-nav__link">
    <span class="md-ellipsis">
      服务访问问题排查
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_13" class="md-nav__link">
    <span class="md-ellipsis">
      节点问题排查
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_14" class="md-nav__link">
    <span class="md-ellipsis">
      常用排障命令集合
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_15" class="md-nav__link">
    <span class="md-ellipsis">
      自动化故障排查脚本
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_16" class="md-nav__link">
    <span class="md-ellipsis">
      高级运维技巧
    </span>
  </a>
  
    <nav class="md-nav" aria-label="高级运维技巧">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#_17" class="md-nav__link">
    <span class="md-ellipsis">
      滚动更新与回滚策略
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#service-mesh" class="md-nav__link">
    <span class="md-ellipsis">
      Service Mesh集成
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#cicd" class="md-nav__link">
    <span class="md-ellipsis">
      CI/CD集成
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#kubernetes_1" class="md-nav__link">
    <span class="md-ellipsis">
      Kubernetes运维自动化脚本集
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
    </ul>
  
</nav>
      
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../best-practices/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    最佳实践
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

    
      
      
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" >
        
          
          <label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    DevOps工具链
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_4">
            <span class="md-nav__icon md-icon"></span>
            DevOps工具链
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../cicd/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    CI/CD流水线
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../devops/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    自动化运维
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

    
      
      
  
  
  
  
    
    
    
    
    <li class="md-nav__item md-nav__item--nested">
      
        
        
        <input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
        
          
          <label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
            
  
  <span class="md-ellipsis">
    Shell 快速入门
  </span>
  

            <span class="md-nav__icon md-icon"></span>
          </label>
        
        <nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
          <label class="md-nav__title" for="__nav_5">
            <span class="md-nav__icon md-icon"></span>
            Shell 快速入门
          </label>
          <ul class="md-nav__list" data-md-scrollfix>
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../../shell/introduction/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    Linux 基础命令
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../../shell/commands/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    常用命令集
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../../shell/variables_and_data_types/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    变量和数据类型
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../../shell/control_flow/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    控制流程 (if、else、for、while)
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../../shell/functions/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    Shell函数
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../../shell/text_processing/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    文本处理三剑客
  </span>
  

      </a>
    </li>
  

              
            
              
                
  
  
  
  
    <li class="md-nav__item">
      <a href="../../../shell/scripts/" class="md-nav__link">
        
  
  <span class="md-ellipsis">
    Shell脚本实战
  </span>
  

      </a>
    </li>
  

              
            
          </ul>
        </nav>
      
    </li>
  

    
  </ul>
</nav>
                  </div>
                </div>
              </div>
            
            
              
              <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc" >
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    

<nav class="md-nav md-nav--secondary" aria-label="目录">
  
  
  
    
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      目录
    </label>
    <ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
      
        <li class="md-nav__item">
  <a href="#_1" class="md-nav__link">
    <span class="md-ellipsis">
      日常管理操作
    </span>
  </a>
  
    <nav class="md-nav" aria-label="日常管理操作">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#_2" class="md-nav__link">
    <span class="md-ellipsis">
      集群健康检查
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_3" class="md-nav__link">
    <span class="md-ellipsis">
      节点维护
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_4" class="md-nav__link">
    <span class="md-ellipsis">
      资源清理
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_5" class="md-nav__link">
    <span class="md-ellipsis">
      备份与恢复
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_6" class="md-nav__link">
    <span class="md-ellipsis">
      监控与日志
    </span>
  </a>
  
    <nav class="md-nav" aria-label="监控与日志">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#prometheus" class="md-nav__link">
    <span class="md-ellipsis">
      Prometheus监控
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_7" class="md-nav__link">
    <span class="md-ellipsis">
      日志收集与分析
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_8" class="md-nav__link">
    <span class="md-ellipsis">
      安全与合规
    </span>
  </a>
  
    <nav class="md-nav" aria-label="安全与合规">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#rbac" class="md-nav__link">
    <span class="md-ellipsis">
      RBAC权限管理
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_9" class="md-nav__link">
    <span class="md-ellipsis">
      安全策略
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_10" class="md-nav__link">
    <span class="md-ellipsis">
      故障排查
    </span>
  </a>
  
    <nav class="md-nav" aria-label="故障排查">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#_11" class="md-nav__link">
    <span class="md-ellipsis">
      常见问题排查流程
    </span>
  </a>
  
    <nav class="md-nav" aria-label="常见问题排查流程">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#pod" class="md-nav__link">
    <span class="md-ellipsis">
      Pod启动失败排查
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_12" class="md-nav__link">
    <span class="md-ellipsis">
      服务访问问题排查
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_13" class="md-nav__link">
    <span class="md-ellipsis">
      节点问题排查
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_14" class="md-nav__link">
    <span class="md-ellipsis">
      常用排障命令集合
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#_15" class="md-nav__link">
    <span class="md-ellipsis">
      自动化故障排查脚本
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
        <li class="md-nav__item">
  <a href="#_16" class="md-nav__link">
    <span class="md-ellipsis">
      高级运维技巧
    </span>
  </a>
  
    <nav class="md-nav" aria-label="高级运维技巧">
      <ul class="md-nav__list">
        
          <li class="md-nav__item">
  <a href="#_17" class="md-nav__link">
    <span class="md-ellipsis">
      滚动更新与回滚策略
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#service-mesh" class="md-nav__link">
    <span class="md-ellipsis">
      Service Mesh集成
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#cicd" class="md-nav__link">
    <span class="md-ellipsis">
      CI/CD集成
    </span>
  </a>
  
</li>
        
          <li class="md-nav__item">
  <a href="#kubernetes_1" class="md-nav__link">
    <span class="md-ellipsis">
      Kubernetes运维自动化脚本集
    </span>
  </a>
  
</li>
        
      </ul>
    </nav>
  
</li>
      
    </ul>
  
</nav>
                  </div>
                </div>
              </div>
            
          
          
            <div class="md-content" data-md-component="content">
              <article class="md-content__inner md-typeset">
                
                  

  
  


<h1 id="kubernetes">Kubernetes运维操作指南</h1>
<h2 id="_1">日常管理操作</h2>
<h3 id="_2">集群健康检查</h3>
<p>定期检查集群状态是运维工作的基础：</p>
<pre><code class="language-bash"># 检查节点状态
kubectl get nodes
kubectl describe nodes

# 检查系统组件状态
kubectl get pods -n kube-system
kubectl get componentstatuses

# 检查所有命名空间的Pod状态
kubectl get pods --all-namespaces | grep -v Running

# 检查事件
kubectl get events --sort-by='.lastTimestamp'
</code></pre>
<h3 id="_3">节点维护</h3>
<p>在节点维护前，需要安全地腾空节点：</p>
<pre><code class="language-bash"># 标记节点为不可调度(cordon)
kubectl cordon node-name

# 安全驱逐节点上的Pod
kubectl drain node-name --ignore-daemonsets --delete-emptydir-data

# 维护完成后，恢复节点可调度状态
kubectl uncordon node-name

# 如需彻底从集群移除节点
kubectl delete node node-name
</code></pre>
<h3 id="_4">资源清理</h3>
<p>定期清理无用资源，避免资源浪费：</p>
<pre><code class="language-bash"># 删除所有Evicted状态的Pod
kubectl get pods --all-namespaces -o json | jq '.items[] | select(.status.reason==&quot;Evicted&quot;) | .metadata.name + &quot; &quot; + .metadata.namespace' | xargs -n2 bash -c 'kubectl delete pod $0 -n $1'

# 清理完成/失败的Job
kubectl delete jobs --all

# 清理之前的Pod日志和容器
for node in $(kubectl get nodes -o=name); do
  kubectl debug $node -it --image=busybox -- sh -c &quot;find /var/log/containers -type f -mtime +7 -exec rm {} \;&quot;
done

# 清理异常终止的Pod
kubectl get pods --all-namespaces | grep Terminated | awk '{print $1 &quot; &quot; $2}' | xargs -n2 bash -c 'kubectl delete pod $1 -n $0'
</code></pre>
<h3 id="_5">备份与恢复</h3>
<p>定期备份etcd数据是灾难恢复的关键：</p>
<pre><code class="language-bash"># 备份etcd
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  snapshot save /backup/etcd-snapshot-$(date +%Y%m%d).db

# 从快照恢复
ETCDCTL_API=3 etcdctl --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/kubernetes/pki/etcd/ca.crt \
  --cert=/etc/kubernetes/pki/etcd/server.crt \
  --key=/etc/kubernetes/pki/etcd/server.key \
  snapshot restore /backup/etcd-snapshot-20230101.db
</code></pre>
<p>使用Velero进行集群备份：</p>
<pre><code class="language-bash"># 安装Velero
velero install \
  --provider aws \
  --plugins velero/velero-plugin-for-aws:v1.2.0 \
  --bucket velero-backup \
  --backup-location-config region=us-east-1 \
  --secret-file ./credentials-velero

# 创建备份
velero backup create cluster-backup --include-namespaces=default,kube-system

# 从备份恢复
velero restore create --from-backup cluster-backup
</code></pre>
<h2 id="_6">监控与日志</h2>
<h3 id="prometheus">Prometheus监控</h3>
<p>使用Prometheus Operator快速部署监控栈：</p>
<pre><code class="language-bash"># 添加Helm仓库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
helm repo update

# 安装Prometheus Operator
helm install prometheus prometheus-community/kube-prometheus-stack \
  --namespace monitoring \
  --create-namespace

# 端口转发访问Grafana
kubectl port-forward -n monitoring svc/prometheus-grafana 3000:80
</code></pre>
<p>监控脚本示例：</p>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [监控] 关键指标监控脚本

PROMETHEUS_URL=&quot;http://prometheus-server.monitoring:9090&quot;

# 获取节点CPU使用率
get_node_cpu_usage() {
  local node=$1
  curl -s &quot;$PROMETHEUS_URL/api/v1/query?query=100-avg(irate(node_cpu_seconds_total{mode='idle',instance='$node'}[5m]))*100&quot; | jq '.data.result[0].value[1]'
}

# 获取节点内存使用率
get_node_memory_usage() {
  local node=$1
  curl -s &quot;$PROMETHEUS_URL/api/v1/query?query=(1-node_memory_MemAvailable_bytes{instance='$node'}/node_memory_MemTotal_bytes{instance='$node'})*100&quot; | jq '.data.result[0].value[1]'
}

# 获取Pod内存使用Top 10
get_pod_memory_top() {
  curl -s &quot;$PROMETHEUS_URL/api/v1/query?query=topk(10,sum(container_memory_usage_bytes{container!='POD',container!='',namespace!='kube-system'}) by (pod,namespace))&quot; | jq '.data.result[] | .metric.namespace + &quot;/&quot; + .metric.pod + &quot;: &quot; + .value[1] + &quot; bytes&quot;'
}

# 主函数
main() {
  echo &quot;===== Kubernetes集群监控报告 =====&quot;
  echo &quot;生成时间: $(date)&quot;

  echo -e &quot;\n节点资源使用情况:&quot;
  for node in $(kubectl get nodes -o jsonpath='{.items[*].metadata.name}'); do
    cpu=$(get_node_cpu_usage &quot;$node:9100&quot;)
    mem=$(get_node_memory_usage &quot;$node:9100&quot;)
    echo &quot;  $node: CPU: ${cpu}%, Memory: ${mem}%&quot;
  done

  echo -e &quot;\n内存使用Top 10 Pods:&quot;
  get_pod_memory_top

  echo -e &quot;\n异常Pod状态:&quot;
  kubectl get pods --all-namespaces | grep -v &quot;Running\|Completed&quot;
}

main
</code></pre>
<h3 id="_7">日志收集与分析</h3>
<p>使用EFK(Elasticsearch, Fluentd, Kibana)栈收集日志：</p>
<pre><code class="language-bash"># 安装Elasticsearch
kubectl apply -f https://download.elastic.co/downloads/eck/1.8.0/crds.yaml
kubectl apply -f https://download.elastic.co/downloads/eck/1.8.0/operator.yaml

# 创建Elasticsearch集群
cat &lt;&lt;EOF | kubectl apply -f -
apiVersion: elasticsearch.k8s.elastic.co/v1
kind: Elasticsearch
metadata:
  name: logging
  namespace: logging
spec:
  version: 7.14.0
  nodeSets:
  - name: default
    count: 3
    config:
      node.store.allow_mmap: false
    podTemplate:
      spec:
        containers:
        - name: elasticsearch
          resources:
            limits:
              memory: 2Gi
              cpu: 1
            requests:
              memory: 2Gi
              cpu: 0.5
EOF

# 安装Kibana
cat &lt;&lt;EOF | kubectl apply -f -
apiVersion: kibana.k8s.elastic.co/v1
kind: Kibana
metadata:
  name: logging
  namespace: logging
spec:
  version: 7.14.0
  count: 1
  elasticsearchRef:
    name: logging
EOF
</code></pre>
<p>日志分析脚本：</p>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [日志分析] 错误日志提取与分析

NAMESPACE=${1:-&quot;default&quot;}
LOG_DIR=&quot;/tmp/logs-analysis&quot;
mkdir -p &quot;$LOG_DIR&quot;

# 提取所有Pod的错误日志
extract_error_logs() {
  echo &quot;从命名空间 $NAMESPACE 提取错误日志...&quot;
  for pod in $(kubectl get pods -n $NAMESPACE -o jsonpath='{.items[*].metadata.name}'); do
    echo &quot;处理Pod: $pod&quot;
    kubectl logs $pod -n $NAMESPACE | grep -i &quot;error\|exception\|fail&quot; &gt; &quot;$LOG_DIR/$pod-errors.log&quot;

    # 统计错误类型及出现频率
    if [ -s &quot;$LOG_DIR/$pod-errors.log&quot; ]; then
      echo &quot;错误统计 - $pod:&quot; &gt; &quot;$LOG_DIR/$pod-summary.txt&quot;
      grep -o -E 'error[a-zA-Z0-9]*|exception[a-zA-Z0-9]*' &quot;$LOG_DIR/$pod-errors.log&quot; | sort | uniq -c | sort -nr &gt;&gt; &quot;$LOG_DIR/$pod-summary.txt&quot;
    fi
  done
}

# 生成汇总报告
generate_summary() {
  echo &quot;生成错误日志汇总报告...&quot;
  {
    echo &quot;# Kubernetes错误日志分析报告&quot;
    echo &quot;## 生成时间: $(date)&quot;
    echo &quot;## 命名空间: $NAMESPACE&quot;
    echo 
    echo &quot;### 包含错误的Pod列表&quot;

    for file in &quot;$LOG_DIR&quot;/*-errors.log; do
      if [ -s &quot;$file&quot; ]; then
        pod_name=$(basename &quot;$file&quot; | sed 's/-errors.log//')
        error_count=$(wc -l &lt; &quot;$file&quot;)
        echo &quot;- $pod_name: $error_count 个错误&quot;
      fi
    done

    echo
    echo &quot;### 详细错误分析&quot;

    for file in &quot;$LOG_DIR&quot;/*-summary.txt; do
      if [ -s &quot;$file&quot; ]; then
        pod_name=$(basename &quot;$file&quot; | sed 's/-summary.txt//')
        echo
        echo &quot;#### $pod_name&quot;
        echo &quot;```&quot;
        cat &quot;$file&quot;
        echo &quot;```&quot;
      fi
    done
  } &gt; &quot;$LOG_DIR/error-report.md&quot;

  echo &quot;报告已生成: $LOG_DIR/error-report.md&quot;
}

# 主函数
main() {
  extract_error_logs
  generate_summary
}

main
</code></pre>
<h2 id="_8">安全与合规</h2>
<h3 id="rbac">RBAC权限管理</h3>
<p>创建角色和绑定用户：</p>
<pre><code class="language-yaml"># 创建Role
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: default
  name: pod-reader
rules:
- apiGroups: [&quot;&quot;]
  resources: [&quot;pods&quot;, &quot;pods/log&quot;]
  verbs: [&quot;get&quot;, &quot;watch&quot;, &quot;list&quot;]

---
# 创建RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: read-pods
  namespace: default
subjects:
- kind: User
  name: jane
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: pod-reader
  apiGroup: rbac.authorization.k8s.io
</code></pre>
<p>批量创建命名空间和权限的脚本：</p>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [RBAC管理] 为团队创建命名空间和权限

# 配置
TEAM_NAME=$1
NAMESPACE=&quot;${TEAM_NAME}-ns&quot;
ADMIN_GROUP=&quot;${TEAM_NAME}-admins&quot;
DEV_GROUP=&quot;${TEAM_NAME}-devs&quot;

# 检查参数
if [ -z &quot;$TEAM_NAME&quot; ]; then
  echo &quot;使用方法: $0 &lt;team-name&gt;&quot;
  exit 1
fi

# 创建命名空间
kubectl create namespace $NAMESPACE

# 创建管理员角色
cat &lt;&lt;EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: $NAMESPACE
  name: team-admin
rules:
- apiGroups: [&quot;*&quot;]
  resources: [&quot;*&quot;]
  verbs: [&quot;*&quot;]
EOF

# 创建开发者角色
cat &lt;&lt;EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
  namespace: $NAMESPACE
  name: team-dev
rules:
- apiGroups: [&quot;&quot;]
  resources: [&quot;pods&quot;, &quot;services&quot;, &quot;configmaps&quot;, &quot;secrets&quot;]
  verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;, &quot;create&quot;, &quot;update&quot;, &quot;patch&quot;, &quot;delete&quot;]
- apiGroups: [&quot;apps&quot;]
  resources: [&quot;deployments&quot;, &quot;statefulsets&quot;]
  verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;, &quot;create&quot;, &quot;update&quot;, &quot;patch&quot;, &quot;delete&quot;]
- apiGroups: [&quot;batch&quot;]
  resources: [&quot;jobs&quot;, &quot;cronjobs&quot;]
  verbs: [&quot;get&quot;, &quot;list&quot;, &quot;watch&quot;, &quot;create&quot;, &quot;update&quot;, &quot;patch&quot;, &quot;delete&quot;]
EOF

# 绑定角色到组
cat &lt;&lt;EOF | kubectl apply -f -
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: team-admins
  namespace: $NAMESPACE
subjects:
- kind: Group
  name: $ADMIN_GROUP
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: team-admin
  apiGroup: rbac.authorization.k8s.io
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
  name: team-devs
  namespace: $NAMESPACE
subjects:
- kind: Group
  name: $DEV_GROUP
  apiGroup: rbac.authorization.k8s.io
roleRef:
  kind: Role
  name: team-dev
  apiGroup: rbac.authorization.k8s.io
EOF

# 创建资源配额
cat &lt;&lt;EOF | kubectl apply -f -
apiVersion: v1
kind: ResourceQuota
metadata:
  name: team-quota
  namespace: $NAMESPACE
spec:
  hard:
    pods: &quot;20&quot;
    requests.cpu: &quot;4&quot;
    requests.memory: 8Gi
    limits.cpu: &quot;8&quot;
    limits.memory: 16Gi
EOF

echo &quot;已为团队 $TEAM_NAME 创建命名空间和权限：&quot;
echo &quot;命名空间: $NAMESPACE&quot;
echo &quot;管理员组: $ADMIN_GROUP&quot;
echo &quot;开发者组: $DEV_GROUP&quot;
</code></pre>
<h3 id="_9">安全策略</h3>
<p>配置Pod安全策略：</p>
<pre><code class="language-yaml"># 创建PodSecurityPolicy
apiVersion: policy/v1beta1
kind: PodSecurityPolicy
metadata:
  name: restricted
  annotations:
    seccomp.security.alpha.kubernetes.io/allowedProfileNames: 'docker/default,runtime/default'
    seccomp.security.alpha.kubernetes.io/defaultProfileName:  'runtime/default'
spec:
  privileged: false
  allowPrivilegeEscalation: false
  requiredDropCapabilities:
    - ALL
  volumes:
    - 'configMap'
    - 'emptyDir'
    - 'projected'
    - 'secret'
    - 'downwardAPI'
    - 'persistentVolumeClaim'
  hostNetwork: false
  hostIPC: false
  hostPID: false
  runAsUser:
    rule: 'MustRunAsNonRoot'
  seLinux:
    rule: 'RunAsAny'
  supplementalGroups:
    rule: 'RunAsAny'
  fsGroup:
    rule: 'RunAsAny'
</code></pre>
<p>配置网络策略：</p>
<pre><code class="language-yaml"># 默认拒绝所有入站流量
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: default-deny-ingress
spec:
  podSelector: {}
  policyTypes:
  - Ingress
</code></pre>
<p>安全扫描脚本：</p>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [安全扫描] 检查常见安全隐患

echo &quot;开始Kubernetes安全扫描...&quot;

# 检查特权容器
echo -e &quot;\n检查特权容器:&quot;
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.namespace}{&quot; &quot;}{.metadata.name}{&quot;\n&quot;}{range .spec.containers[*]}{&quot;\t&quot;}{.name}{&quot;\t&quot;}{.securityContext.privileged}{&quot;\n&quot;}{end}{end}' | grep -E &quot;true$&quot;

# 检查挂载了主机路径的Pod
echo -e &quot;\n检查挂载主机路径的Pod:&quot;
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.namespace}{&quot; &quot;}{.metadata.name}{&quot;\n&quot;}{range .spec.volumes[*]}{&quot;\t&quot;}{.name}{&quot;\t&quot;}{.hostPath.path}{&quot;\n&quot;}{end}{end}' | grep -v &quot;^[[:space:]]*$&quot; | grep -v &quot;^[^ ]* [^ ]*$&quot;

# 检查容器以root用户运行
echo -e &quot;\n检查以root用户运行的容器:&quot;
kubectl get pods --all-namespaces -o jsonpath='{range .items[*]}{.metadata.namespace}{&quot; &quot;}{.metadata.name}{&quot;\n&quot;}{range .spec.containers[*]}{&quot;\t&quot;}{.name}{&quot;\t&quot;}runAsUser:{.securityContext.runAsUser}{&quot;\n&quot;}{end}{end}' | grep -E &quot;runAsUser:0|runAsUser:$&quot;

# 检查公开的Secret
echo -e &quot;\n检查公开的Secret:&quot;
kubectl get secrets --all-namespaces -o json | jq -r '.items[] | select(.metadata.annotations[&quot;kubernetes.io/service-account.name&quot;] == null) | .metadata.namespace + &quot; &quot; + .metadata.name'

# 检查Default ServiceAccount权限
echo -e &quot;\n检查Default ServiceAccount权限绑定:&quot;
kubectl get rolebinding,clusterrolebinding --all-namespaces -o json | jq -r '.items[] | select(.subjects[]?.kind==&quot;ServiceAccount&quot; and .subjects[]?.name==&quot;default&quot;) | .metadata.namespace + &quot; &quot; + .kind + &quot; &quot; + .metadata.name'

echo -e &quot;\n安全扫描完成。&quot;
</code></pre>
<h2 id="_10">故障排查</h2>
<h3 id="_11">常见问题排查流程</h3>
<h4 id="pod">Pod启动失败排查</h4>
<pre><code class="language-bash"># 查看Pod状态
kubectl get pod &lt;pod-name&gt; -o wide

# 查看Pod详情
kubectl describe pod &lt;pod-name&gt;

# 查看Pod日志
kubectl logs &lt;pod-name&gt; 
kubectl logs &lt;pod-name&gt; -c &lt;container-name&gt;  # 多容器Pod
kubectl logs &lt;pod-name&gt; --previous  # 查看之前容器的日志

# 进入容器调试
kubectl exec -it &lt;pod-name&gt; -- /bin/sh
</code></pre>
<h4 id="_12">服务访问问题排查</h4>
<pre><code class="language-bash"># 检查Service
kubectl get svc &lt;service-name&gt;
kubectl describe svc &lt;service-name&gt;

# 检查Endpoints
kubectl get endpoints &lt;service-name&gt;

# 检查Pod标签
kubectl get pods --show-labels | grep &lt;app-label&gt;

# 测试服务连通性
kubectl run test-${RANDOM} --rm -it --image=busybox -- wget -O- &lt;service-name&gt;:&lt;port&gt;

# 检查NetworkPolicy
kubectl get networkpolicy
</code></pre>
<h4 id="_13">节点问题排查</h4>
<pre><code class="language-bash"># 检查节点状态
kubectl describe node &lt;node-name&gt;

# 检查节点资源使用情况
kubectl top node &lt;node-name&gt;

# SSH到节点进行检查
ssh &lt;node-ip&gt;
# 检查系统负载
top
# 检查磁盘空间
df -h
# 检查Docker状态
systemctl status docker
# 查看kubelet日志
journalctl -u kubelet
</code></pre>
<h3 id="_14">常用排障命令集合</h3>
<pre><code class="language-bash"># Pod问题
kubectl get events --sort-by='.lastTimestamp'  # 查看事件
kubectl logs &lt;pod-name&gt; --all-containers=true  # 查看所有容器日志
kubectl debug &lt;pod-name&gt; -it --image=busybox  # 使用调试容器
kubectl get pod &lt;pod-name&gt; -o yaml &gt; pod-def.yaml  # 导出Pod定义

# 集群问题
kubectl get componentstatuses  # 检查集群组件状态
kubectl cluster-info  # 查看集群信息
kubectl cluster-info dump  # 导出集群详细信息
kubectl get apiservice  # 检查API服务
kubectl api-resources  # 列出所有资源类型

# 网络问题
kubectl run netshoot --rm -it --image=nicolaka/netshoot -- bash  # 网络调试容器
kubectl port-forward &lt;pod-name&gt; 8080:80  # 端口转发
</code></pre>
<h3 id="_15">自动化故障排查脚本</h3>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [故障排查] 自动收集诊断信息

OUTPUT_DIR=&quot;/tmp/k8s-debug-$(date +%Y%m%d-%H%M%S)&quot;
mkdir -p $OUTPUT_DIR

echo &quot;开始收集Kubernetes集群诊断信息...&quot;

# 收集集群信息
echo &quot;收集集群信息...&quot;
kubectl cluster-info &gt; $OUTPUT_DIR/cluster-info.txt 2&gt;&amp;1
kubectl get componentstatuses &gt; $OUTPUT_DIR/component-status.txt 2&gt;&amp;1
kubectl get nodes -o wide &gt; $OUTPUT_DIR/nodes.txt 2&gt;&amp;1
kubectl top nodes &gt; $OUTPUT_DIR/nodes-resource.txt 2&gt;&amp;1

# 收集命名空间资源信息
echo &quot;收集资源信息...&quot;
kubectl get ns &gt; $OUTPUT_DIR/namespaces.txt 2&gt;&amp;1

for ns in $(kubectl get ns -o jsonpath='{.items[*].metadata.name}'); do
  mkdir -p $OUTPUT_DIR/$ns

  # 收集核心资源
  kubectl get all -n $ns -o wide &gt; $OUTPUT_DIR/$ns/all-resources.txt 2&gt;&amp;1
  kubectl get cm,secret -n $ns &gt; $OUTPUT_DIR/$ns/configs.txt 2&gt;&amp;1
  kubectl get pv,pvc -n $ns &gt; $OUTPUT_DIR/$ns/storage.txt 2&gt;&amp;1

  # 收集Pod详情
  for pod in $(kubectl get pods -n $ns -o jsonpath='{.items[*].metadata.name}'); do
    mkdir -p $OUTPUT_DIR/$ns/pods/$pod
    kubectl describe pod $pod -n $ns &gt; $OUTPUT_DIR/$ns/pods/$pod/describe.txt 2&gt;&amp;1
    kubectl get pod $pod -n $ns -o yaml &gt; $OUTPUT_DIR/$ns/pods/$pod/definition.yaml 2&gt;&amp;1

    # 收集容器日志
    for container in $(kubectl get pod $pod -n $ns -o jsonpath='{.spec.containers[*].name}'); do
      kubectl logs $pod -c $container -n $ns &gt; $OUTPUT_DIR/$ns/pods/$pod/logs-$container.txt 2&gt;&amp;1 || true
    done
  done
done

# 收集事件
echo &quot;收集事件信息...&quot;
kubectl get events --all-namespaces --sort-by='.lastTimestamp' &gt; $OUTPUT_DIR/events.txt 2&gt;&amp;1

# 压缩结果
echo &quot;压缩诊断信息...&quot;
tar -czvf $OUTPUT_DIR.tar.gz $OUTPUT_DIR

echo &quot;诊断信息收集完成: $OUTPUT_DIR.tar.gz&quot;
</code></pre>
<h2 id="_16">高级运维技巧</h2>
<h3 id="_17">滚动更新与回滚策略</h3>
<p>配置复杂的滚动更新策略：</p>
<pre><code class="language-yaml"># 高级滚动更新配置
spec:
  replicas: 5
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 25%        # 允许超出replicas的Pod数量
      maxUnavailable: 25%  # 更新过程中允许不可用的Pod数量
</code></pre>
<p>使用canary部署进行灰度发布：</p>
<pre><code class="language-bash"># 部署canary版本(10%流量)
cat &lt;&lt;EOF | kubectl apply -f -
apiVersion: apps/v1
kind: Deployment
metadata:
  name: app-canary
spec:
  replicas: 1  # 比例为1:9
  selector:
    matchLabels:
      app: myapp
      track: canary
  template:
    metadata:
      labels:
        app: myapp
        track: canary
    spec:
      containers:
      - name: myapp
        image: myapp:v2
EOF

# 检查canary版本
kubectl get pods -l app=myapp -l track=canary

# 成功后升级主版本
kubectl set image deployment/app myapp=myapp:v2
</code></pre>
<h3 id="service-mesh">Service Mesh集成</h3>
<p>使用Istio实现高级流量管理：</p>
<pre><code class="language-yaml"># VirtualService配置流量路由
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: myapp
spec:
  hosts:
  - myapp
  http:
  - route:
    - destination:
        host: myapp
        subset: v1
      weight: 80
    - destination:
        host: myapp
        subset: v2
      weight: 20
</code></pre>
<p>配置重试和熔断：</p>
<pre><code class="language-yaml"># DestinationRule配置熔断
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
  name: myapp
spec:
  host: myapp
  trafficPolicy:
    connectionPool:
      tcp:
        maxConnections: 100
      http:
        http1MaxPendingRequests: 10
        maxRequestsPerConnection: 10
    outlierDetection:
      consecutive5xxErrors: 5
      interval: 30s
      baseEjectionTime: 30s
  subsets:
  - name: v1
    labels:
      version: v1
  - name: v2
    labels:
      version: v2
</code></pre>
<h3 id="cicd">CI/CD集成</h3>
<p>配置GitOps流程与ArgoCD：</p>
<pre><code class="language-yaml"># ArgoCD Application
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: myapp
  namespace: argocd
spec:
  project: default
  source:
    repoURL: https://github.com/myorg/myapp.git
    targetRevision: HEAD
    path: k8s/overlays/production
  destination:
    server: https://kubernetes.default.svc
    namespace: production
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
    - CreateNamespace=true
</code></pre>
<h3 id="kubernetes_1">Kubernetes运维自动化脚本集</h3>
<p>集群每日检查脚本：</p>
<pre><code class="language-bash">#!/bin/bash
# @author Loganli
# [运维自动化] 集群每日健康检查

REPORT_FILE=&quot;/tmp/k8s-health-$(date +%Y%m%d).txt&quot;

echo &quot;Kubernetes集群健康检查 - $(date)&quot; &gt; $REPORT_FILE
echo &quot;=================================&quot; &gt;&gt; $REPORT_FILE

# 检查节点
echo -e &quot;\n节点状态:&quot; &gt;&gt; $REPORT_FILE
kubectl get nodes -o wide &gt;&gt; $REPORT_FILE

# 检查节点资源使用情况
echo -e &quot;\n节点资源使用情况:&quot; &gt;&gt; $REPORT_FILE
kubectl top nodes &gt;&gt; $REPORT_FILE

# 检查组件状态
echo -e &quot;\n组件状态:&quot; &gt;&gt; $REPORT_FILE
kubectl get componentstatuses &gt;&gt; $REPORT_FILE

# 检查命名空间
echo -e &quot;\n命名空间状态:&quot; &gt;&gt; $REPORT_FILE
kubectl get namespaces &gt;&gt; $REPORT_FILE

# 检查非Running的Pod
echo -e &quot;\n非Running状态的Pod:&quot; &gt;&gt; $REPORT_FILE
kubectl get pods --all-namespaces | grep -v &quot;Running\|Completed&quot; &gt;&gt; $REPORT_FILE

# 检查PVC状态
echo -e &quot;\nPVC状态:&quot; &gt;&gt; $REPORT_FILE
kubectl get pvc --all-namespaces &gt;&gt; $REPORT_FILE

# 检查最近事件
echo -e &quot;\n最近事件:&quot; &gt;&gt; $REPORT_FILE
kubectl get events --all-namespaces --sort-by='.lastTimestamp' | tail -20 &gt;&gt; $REPORT_FILE

# 检查节点磁盘使用情况
echo -e &quot;\n节点磁盘使用情况:&quot; &gt;&gt; $REPORT_FILE
for node in $(kubectl get nodes -o jsonpath='{.items[*].metadata.name}'); do
  echo -e &quot;\n节点: $node&quot; &gt;&gt; $REPORT_FILE
  kubectl debug node/$node -it --image=busybox -- df -h 2&gt;/dev/null | grep -E &quot;^/dev/&quot; &gt;&gt; $REPORT_FILE || echo &quot;无法获取磁盘信息&quot; &gt;&gt; $REPORT_FILE
done

echo -e &quot;\n健康检查完成，报告保存至: $REPORT_FILE&quot;
cat $REPORT_FILE
</code></pre>
<p>这些实用操作和脚本将帮助你更有效地管理和运维Kubernetes集群，提高集群的可靠性和稳定性。</p>












                
              </article>
            </div>
          
          
<script>var target=document.getElementById(location.hash.slice(1));target&&target.name&&(target.checked=target.name.startsWith("__tabbed_"))</script>
        </div>
        
      </main>
      
        <footer class="md-footer">
  
  <div class="md-footer-meta md-typeset">
    <div class="md-footer-meta__inner md-grid">
      <div class="md-copyright">
  
  
    Made with
    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
      Material for MkDocs
    </a>
  
</div>
      
        <div class="md-social">
  
    
    
    
    
      
      
    
    <a href="https://git.opsx.vip/docs/PythonFullStackGuide.git" target="_blank" rel="noopener" title="git.opsx.vip" class="md-social__link">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M165.9 397.4c0 2-2.3 3.6-5.2 3.6-3.3.3-5.6-1.3-5.6-3.6 0-2 2.3-3.6 5.2-3.6 3-.3 5.6 1.3 5.6 3.6m-31.1-4.5c-.7 2 1.3 4.3 4.3 4.9 2.6 1 5.6 0 6.2-2s-1.3-4.3-4.3-5.2c-2.6-.7-5.5.3-6.2 2.3m44.2-1.7c-2.9.7-4.9 2.6-4.6 4.9.3 2 2.9 3.3 5.9 2.6 2.9-.7 4.9-2.6 4.6-4.6-.3-1.9-3-3.2-5.9-2.9M244.8 8C106.1 8 0 113.3 0 252c0 110.9 69.8 205.8 169.5 239.2 12.8 2.3 17.3-5.6 17.3-12.1 0-6.2-.3-40.4-.3-61.4 0 0-70 15-84.7-29.8 0 0-11.4-29.1-27.8-36.6 0 0-22.9-15.7 1.6-15.4 0 0 24.9 2 38.6 25.8 21.9 38.6 58.6 27.5 72.9 20.9 2.3-16 8.8-27.1 16-33.7-55.9-6.2-112.3-14.3-112.3-110.5 0-27.5 7.6-41.3 23.6-58.9-2.6-6.5-11.1-33.3 2.6-67.9 20.9-6.5 69 27 69 27 20-5.6 41.5-8.5 62.8-8.5s42.8 2.9 62.8 8.5c0 0 48.1-33.6 69-27 13.7 34.7 5.2 61.4 2.6 67.9 16 17.7 25.8 31.5 25.8 58.9 0 96.5-58.9 104.2-114.8 110.5 9.2 7.9 17 22.9 17 46.4 0 33.7-.3 75.4-.3 83.6 0 6.5 4.6 14.4 17.3 12.1C428.2 457.8 496 362.9 496 252 496 113.3 383.5 8 244.8 8M97.2 352.9c-1.3 1-1 3.3.7 5.2 1.6 1.6 3.9 2.3 5.2 1 1.3-1 1-3.3-.7-5.2-1.6-1.6-3.9-2.3-5.2-1m-10.8-8.1c-.7 1.3.3 2.9 2.3 3.9 1.6 1 3.6.7 4.3-.7.7-1.3-.3-2.9-2.3-3.9-2-.6-3.6-.3-4.3.7m32.4 35.6c-1.6 1.3-1 4.3 1.3 6.2 2.3 2.3 5.2 2.6 6.5 1 1.3-1.3.7-4.3-1.3-6.2-2.2-2.3-5.2-2.6-6.5-1m-11.4-14.7c-1.6 1-1.6 3.6 0 5.9s4.3 3.3 5.6 2.3c1.6-1.3 1.6-3.9 0-6.2-1.4-2.3-4-3.3-5.6-2"/></svg>
    </a>
  
    
    
    
    
    <a href="mailto:admin@attacker.club" target="_blank" rel="noopener" title="" class="md-social__link">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><!--! Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2024 Fonticons, Inc.--><path d="M48 64C21.5 64 0 85.5 0 112c0 15.1 7.1 29.3 19.2 38.4l217.6 163.2c11.4 8.5 27 8.5 38.4 0l217.6-163.2c12.1-9.1 19.2-23.3 19.2-38.4 0-26.5-21.5-48-48-48zM0 176v208c0 35.3 28.7 64 64 64h384c35.3 0 64-28.7 64-64V176L294.4 339.2a63.9 63.9 0 0 1-76.8 0z"/></svg>
    </a>
  
</div>
      
    </div>
  </div>
</footer>
      
    </div>
    <div class="md-dialog" data-md-component="dialog">
      <div class="md-dialog__inner md-typeset"></div>
    </div>
    
    
    <script id="__config" type="application/json">{"base": "../../..", "features": [], "search": "../../../assets/javascripts/workers/search.f8cc74c7.min.js", "translations": {"clipboard.copied": "\u5df2\u590d\u5236", "clipboard.copy": "\u590d\u5236", "search.result.more.one": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.more.other": "\u5728\u8be5\u9875\u4e0a\u8fd8\u6709 # \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.none": "\u6ca1\u6709\u627e\u5230\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.one": "\u627e\u5230 1 \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.other": "# \u4e2a\u7b26\u5408\u6761\u4ef6\u7684\u7ed3\u679c", "search.result.placeholder": "\u952e\u5165\u4ee5\u5f00\u59cb\u641c\u7d22", "search.result.term.missing": "\u7f3a\u5c11", "select.version": "\u9009\u62e9\u5f53\u524d\u7248\u672c"}}</script>
    
    
      <script src="../../../assets/javascripts/bundle.60a45f97.min.js"></script>
      
        <script src="../../../js/prism.js"></script>
      
    
  </body>
</html>